package array

func spiralOrder(matrix [][]int) []int {
	var ans []int
	if len(matrix) == 0 {
		return ans
	}
	u := 0
	d := len(matrix) - 1
	l := 0
	r := len(matrix[0]) - 1
	for true {
		//right
		for i := l; i <= r; i++ {
			ans = append(ans, matrix[u][i])
		}
		u++
		if u > d {
			break
		}
		for i := u; i <= d; i++ {
			ans = append(ans, matrix[i][r])
		}
		r--
		if r < l {
			break
		}
		for i := r; i >= l; i-- {
			ans = append(ans, matrix[d][i])
		}
		d--
		if d < u {
			break
		}
		for i := d; i >= u; i-- {
			ans = append(ans, matrix[i][l])
		}
		l++
		if l > r {
			break
		}
	}
	return ans
}
